﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static bool done;
        static object locker = new object(); // ！！

        static void Main(string[] args)
        {

            new Thread(Go).Start(); // 在新的线程上调用Go
            Console.WriteLine("路过1");
            Go(); // 在主线程上调用Go
            Console.WriteLine("路过2");
            new Thread(Go).Start(); // 在新的线程上调用Go
            Console.WriteLine("路过3");
            new Thread(Go).Start(); // 在新的线程上调用Go
            Console.WriteLine("路过4");
            new Thread(Go).Start(); // 在新的线程上调用Go
            Console.WriteLine("路过5");
            Console.ReadKey();
        }

        static void Go()
        {
            lock (locker)
            {
                Console.WriteLine("进入locker");
                if (!done)
                {
                    Console.WriteLine("进入locker并做些什么");
                    Thread.Sleep(500); // Doing something.
                    Console.WriteLine("Done");
                    done = true;
                }
            }
        }
    }
}
